查看原文
其他

R语言聚类分析

许久不发,今天想起来发一条,就给大家讲讲聚类分析,抛砖引玉

r语言中使用hclust(d, method = "complete", members=NULL) 来进行层次聚类

method表示类的合并方法,有:

single            最短距离法

complete        最长距离法

median        中间距离法

mcquitty        相似法

average        类平均法

centroid        重心法

ward            离差平方和法

数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。

  其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上,常见的数据归一化的方法有:

min-max标准化(Min-max normalization)

  也叫离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:

  其中max为样本数据的最大值,min为样本数据的最小值。这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

log函数转换

  通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:

  看了下网上很多介绍都是x*=log10(x),其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。

atan函数转换

  用反正切函数也可以实现数据的归一化:

  使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上。

  而并非所有数据标准化的结果都映射到[0,1]区间上,其中最常见的标准化方法就是Z标准化,也是SPSS中最为常用的标准化方法:

z-score 标准化(zero-mean normalization)

  也叫标准差标准化,经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

  其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

下面举一个例子:

对新疆地区进行聚类分析:

placeheightwaterfallicesoildepthwindday
哈巴河532.6173.815061.8
阿勒泰735.1191.514637.7
克拉玛依427114.419775.4
巴楚1116.541.6647.6
莎车1231.242.59311
于田142746.4811.4

xinj<-read.csv("xinjiang.csv",header = TRUE)

fun <- function(x) (x-min(x))/(max(x)-min(x))

xj3 <- apply(xinj[,2:5], 2, FUN=fun) # use method "min-max"

xj3<-data.frame(xinj[,1],xj3)

hc.single=hclust(dist(xj3[2:5]),method = "single")     #最短距离法聚类

plot(hc.single,main = "Single Linkage",xlab="",labels=xj3$xinj...1.,ylab="",sub = "place",cex=.9)  #制作聚类图


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存